package InterfaceOffer;
// 吃火锅
// 玉皇大帝家在1号城堡
// 每条有效的边一定走了来回两次

import java.util.Scanner;

public class ALiSolution2 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 第一行输入n座城堡和T最大时间限制
        int n = in.nextInt();
        int T = in.nextInt();

        // 记录美味值的数组
        int[] arr = new int[n];
        // 记录边和花费的矩阵
        int[][] cost = new int[n - 1][3];

        // 第二行输入每座城堡的美味值a_i
        for (int i = 0; i < n; i++) {
            arr[n] = in.nextInt();
        }
        // 接下来n-1行每行三个整数u，v，w代表u到v需要花费的时间w
        for (int i = 0; i < n - 1; i++) {
            cost[i][0] = in.nextInt();
            cost[i][1] = in.nextInt();
            cost[i][2] = in.nextInt() * 2;
        }

        int current[] = new int[3];
        // 当前美味值current[0]
        current[0] = arr[0]; // 1号的火锅一定能吃到
        // 目前已花费时间current[1]
        current[1] = 0;
        // 最大美味值
        current[2] = current[0];
        dfs(arr, cost, current, T, 0);
        // 输出答案
        System.out.println(current[0]);
    }

    // 深搜
    // k为循环开始值
    public static void dfs(int[] arr, int[][] cost, int[] current, int T, int k) {

        for (int i = k; i < cost.length; i++) {
            if (current[1] + cost[i][2] > T) {
                continue;
            } else {
                current[0] += cost[i][2];
                if (current[0] > current[2]) {
                    current[2] = current[0];
                }
                dfs(arr,cost,current,T,i+1);
                current[0] -= cost[i][2];
            }
        }
    }
}
